package com.tan.kotlintest.base

import android.os.Bundle
import android.support.v4.app.Fragment
import com.tan.kotlintest.util.LogUtil

/*
 * Copyright (C) 2018 重庆一聊高科技有限公司
 * 版权所有
 *
 * 功能描述：懒加载基类
 * 作者：txj
 * 创建时间：2018/9/15
 *
 * 修改人：
 * 修改描述：
 * 修改日期
 */
abstract class LazyFragment : Fragment() {

    var mIsVisibleToUser: Boolean = false //是否可见
    var mIsViewPrepared: Boolean = false //判断view是否初始化完成
    protected var mIsDataLoadCompleted: Boolean = false //数据是否加载完成
    var mIsFirstVisibleToUser: Boolean = true

    // 该方法只有在ViewPager与Fragment结合使用的时候才会执行
    // 该方法在onCreateView之前调用
    override fun setUserVisibleHint(isVisibleToUser: Boolean) {
        super.setUserVisibleHint(isVisibleToUser)
        mIsVisibleToUser = isVisibleToUser
        if (isVisibleToUser) {
            if (mIsFirstVisibleToUser && mIsViewPrepared && !mIsDataLoadCompleted) {
                mIsFirstVisibleToUser = false
                LogUtil.i("LazyFragment: 第一次可见")
                onFirstVisibleToUser()
            }
        } else {
            if (mIsViewPrepared && mIsDataLoadCompleted) {
                onFragmentNotVisible()
            }
        }
    }

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        if (userVisibleHint) {
            onFirstVisibleToUser()
        }
    }

    /**
     * 做懒加载的地方
     */
    protected abstract fun onFirstVisibleToUser()

    /**
     * 当Fragment不可见的时候,view初始化已经完成,数据已经加载完毕
     */
    protected open fun onFragmentNotVisible() {

    }

}